package cn.edu.nwpu.warehousemanagement.controller;

import cn.edu.nwpu.warehousemanagement.pojo.Product;
import cn.edu.nwpu.warehousemanagement.pojo.Result;
import cn.edu.nwpu.warehousemanagement.pojo.dto.IDDTO;
import cn.edu.nwpu.warehousemanagement.pojo.dto.NameDTO;
import cn.edu.nwpu.warehousemanagement.pojo.dto.PageDTO;
import cn.edu.nwpu.warehousemanagement.pojo.dto.ProductStatisticsDTO;
import cn.edu.nwpu.warehousemanagement.service.ProductService;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 商品控制器
 *
 * @author LSR
 */
@RestController
@RequestMapping("/api/product")
@RequiredArgsConstructor
public class ProductController {

    private final ProductService productService;

    /**
     * 创建商品
     *
     * @param product 商品实体
     * @return 操作结果
     */
    @PostMapping("/create")
    public Result<Product> create(@RequestBody Product product) {
        if (product.getName() == null || product.getName().trim().isEmpty()) {
            return Result.error("商品名称不能为空");
        }
        return productService.create(product);
    }

    /**
     * 删除商品（软删除）
     *
     * @param idDTO 包含ID的请求体
     * @return 操作结果
     */
    @PostMapping("/delete")
    public Result<Void> delete(@RequestBody IDDTO idDTO) {
        if (idDTO.getId() == null) {
            return Result.error("ID不能为空");
        }
        return productService.delete(idDTO.getId());
    }

    /**
     * 更新商品
     *
     * @param product 商品实体
     * @return 操作结果
     */
    @PostMapping("/update")
    public Result<Product> update(@RequestBody Product product) {
        return productService.update(product);
    }

    /**
     * 根据ID获取商品（不包括已删除的）
     *
     * @param productIdDTO 包含ID的请求体
     * @return 操作结果
     */
    @PostMapping("/get-by-id")
    public Result<Product> getById(@RequestBody IDDTO productIdDTO) {
        if (productIdDTO.getId() == null) {
            return Result.error("ID不能为空");
        }
        return productService.getById(productIdDTO.getId());
    }

    /**
     * 根据名称获取商品（不包括已删除的）
     *
     * @param nameDTO 包含名称的请求体
     * @return 操作结果
     */
    @PostMapping("/get-by-name")
    public Result<List<Product>> getByName(@RequestBody NameDTO nameDTO) {
        if (nameDTO.getName() == null || nameDTO.getName().trim().isEmpty()) {
            return Result.error("商品名称不能为空");
        }
        return productService.getByName(nameDTO.getName());
    }

    /**
     * 分页查询商品（不包括已删除的）
     *
     * @param pageDTO 包含pageNum的请求体
     * @return 分页结果
     */
    @PostMapping("/list-by-page")
    public Result<Page<Product>> listByPage(@RequestBody PageDTO pageDTO) {
        if (pageDTO.getPageNum() < 1) {
            return Result.error("页码必须大于0");
        }
        return productService.listByPage(pageDTO);
    }

    /**
     * 按页返回所有Product（不包括已删除的）
     *
     * @return 返回一个包含多个Page的List，每个Page包含20条Product
     */
    @PostMapping("/get-all-product-pages")
    public Result<List<Page<Product>>> getAllProductPages() {
        return productService.getAllProductPages();
    }

    /**
     * 返回一个包含所有Product的List（不包括已删除的）
     *
     * @return 返回一个包含所有Product的List
     */
    @PostMapping("get-all-product-list")
    public Result<List<Product>> getAllProductList() {
        return productService.getAllProductList();
    }

    /**
     * 获取完整的产品库存统计信息
     * @return 产品统计结果
     */
    @PostMapping("/statistics")
    public Result<ProductStatisticsDTO> getProductStatistics() {
        return productService.getProductStatistics();
    }
}